package com.example.webweatherapplication

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.ArrayAdapter
import android.widget.ListView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.concurrent.thread

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge() // 启用边缘到边缘的显示
        setContentView(R.layout.activity_main) // 设置布局文件

        thread {// 在后台线程中执行操作，避免阻塞主UI线程
            val listView = findViewById<ListView>(R.id.listView) // 获取 ListView 控件
            val str = readFileFromRaw(R.raw.citycode) // 从 raw 资源文件中读取城市代码
            val gson = Gson()
            val CityType = object : TypeToken<List<City>>() {}.type
            var cities: List<City> = gson.fromJson(str, CityType) // 将 JSON 字符串转换为城市列表
            cities = cities.filter { it.city_code != "" } // 过滤掉没有城市代码的城市

            runOnUiThread {
                val adapter = ArrayAdapter<City>(this, android.R.layout.simple_list_item_1, cities) // 创建适配器
                listView.adapter = adapter // 设置适配器给ListView，显示 cities 列表中的数据
                listView.setOnItemClickListener { _, _, position, _ ->
                    val cityCode = cities[position].city_code // 获取选中城市的代码
                    val intent = Intent(this, MainActivity2::class.java) // 创建 Intent
                    intent.putExtra("city_code", cityCode) // 将城市代码传递给下一个活动
                    startActivity(intent) // 启动下一个活动
                }
            }
            Log.d("MainActivity", "$cities") // 打印城市列表日志
        }
    }

    fun readFileFromRaw(rawName: Int): String? {
        try {
            val inputReader = InputStreamReader(resources.openRawResource(rawName)) // 打开 raw 资源文件
            val bufReader = BufferedReader(inputReader)
            var line: String? = ""
            var result: String? = ""
            while (bufReader.readLine().also { line = it } != null) {
                result += line // 读取文件内容
            }
            return result
        } catch (e: Exception) {
            e.printStackTrace() // 打印异常信息
        }
        return ""
    }
}